package values

import groovy.transform.EqualsAndHashCode

/**
 * Superclase de Variable y Parameter.
 * @author pab
 */ 
@EqualsAndHashCode // el equals es necesario para el HttpCache para usar HttpRequestData como key, y esa clase tiene una Map de Variable, por eso depende de Variable para saber si hay un cache hit en el HttpCache.
class Variable {

   /**
    * Nombre de la variable o parametro.
    */
   String name
   
   /**
    * Valor de la varaible o parametro.
    * Para la variable, el valor se establece cuando se resuelve la variable.
    * Para el parametro, el valor se establece al crear la instancia.
    */
   Object value
   
   /**
    * El tipo se usa para castear los valores de variables resueltos
    * usando servicios web. El problema es que siempre se obtiene un
    * valor String y el valor contra el cual se quiere comparar puede
    * no se String, entonces hay que transformar el String en el mismo
    * tipo del valor contra el cual se quiere comparar.
    */
   ValueType type = ValueType.STRING // por defecto es string
   
   /* con esto tengo que implementar Serializable para que no tire la excepcion
   public int hashCode()
   {
      def byteStream = new ByteArrayOutputStream(1500);
      def os = new ObjectOutputStream(new BufferedOutputStream(byteStream));
      os.flush();
      os.writeObject(this);
      os.flush();
      byte[] sendBuf = byteStream.toByteArray();
      os.close();
      String ob1 = new String(sendBuf)
      
      return ob1.hashCode()
   }
   
   public boolean equals(Object other)
   {
      return other instanceof Variable && this.name == other.name && this.value == other.value && this.type == other.type
   }
   */
}